package jp.co.nes.awssupport.business.logic.description;

import java.util.List;

import jp.co.nes.awssupport.business.bean.BillingCsvBean;
import jp.co.nes.awssupport.common.bean.ReservedManageBean;

/**
 * 説明作成インタフェースです。<br>
 * 説明を作成し、返却する処理を実装します。
 */
public interface Description {

    /**
     * リザーブド購入(前払い料金)に関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @param rmBean リザーブド管理
     * @return 説明
     */
    public String getForReservedUpfront(BillingCsvBean csvBean, ReservedManageBean rmBean);

    /**
     * リザーブド定額月額料金に関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @param rmBean リザーブド管理
     * @return 説明
     */
    public String getForReservedMonthlyFixed(BillingCsvBean csvBean, ReservedManageBean rmBean);

    /**
     * リザーブドインスタンスの従量料金(融通リザーブドでない)に関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @param rmBean リザーブド管理
     * @return 説明
     */
    public String getForReservedMetered(BillingCsvBean csvBean, ReservedManageBean rmBean);

    /**
     * リザーブドインスタンスの従量料金(融通リザーブドである)に関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @return 説明
     */
    public String getForBlendedReserved(BillingCsvBean csvBean);

    /**
     * スポットに関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @return 説明
     */
    public String getForSpot(BillingCsvBean csvBean);

    /**
     * オンデマンドに関する説明を作成し、返却します。
     *
     * @param csvBean 請求CSV
     * @return 説明
     */
    public String getForOnDemand(BillingCsvBean csvBean);

    /**
     * 説明作成中に発生したワーニングメッセージリストを返却します。
     *
     * @return ワーニングメッセージリスト
     */
    public List<String> getWarnMessageList();
}
